package com.shuang.string2;

public class ReverseStr {

    public String reverseStr(String s, int k) {
        //k为一时
        if (k == 1) {
            return s;
        }

        //k大于1时
        //先把字符串放到一个字符数组中
        char[] ch = s.toCharArray();
        //循环每次移动2k个单位 先让本次区间中k个单位反转然后i移动2k个单位到下一个区间 最后按题目要求判断区间即可
        for (int i = 0; i < ch.length; i += 2 * k) {

            //没到最后判断是否剩余的时候 正常执行这个语句反转这个区间的前k个 最后一次循环要判断字符串最后剩余的长度时 大于或等于 k 个，则反转前 k 个字符，其余字符保持原样
            if (i + k <= ch.length) {
                reverse(ch, i, i + k - 1);
                continue;
            }

            //最后一次没进上述if语句 说明最后判断的剩余的字符串长度小于k将剩余的全部反转
            reverse(ch, i, ch.length - 1);
        }
        //返回字符串
        return new String(ch);
    }

    // 定义翻转函数
    public void reverse(char[] ch, int i, int j) {
        for (; i < j; i++, j--) {
            char temp = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
        }
    }

}
